void HoughTrans (ImSize, AccuRows, AccuCols, MaxGV,
                 ThinMag, ThinAng, IntAccu, Accu)
int  ImSize, AccuRows, AccuCols, MaxGV;
BYTE ** ThinMag;
BYTE ** ThinAng;
int  ** IntAccu;
BYTE ** Accu;
{
   int    r,c, Alpha, Theta, Rad, Mag, MaxMag;
   double Dtheta;

   for (r=0; r<AccuRows; r++) {
      for (c=0; c<AccuCols; c++) {
         IntAccu [r][c] = 0;
         Accu [r][c] = 0;
   }  }

   for (r=0; r<ImSize; r++) {
      for (c=0; c<ImSize; c++) {
         if (ThinMag [r][c]) {
            Alpha = (int) ThinAng [r][c];
            if (Alpha >= 128)  Alpha -= 128;
            if (Alpha <=  64)  Theta = 64 - Alpha;
                         else  Theta = 192 - Alpha;
            Dtheta = (Theta*PI)/128;
            Rad = (int) (c*cos(Dtheta) + r*sin(Dtheta));
            IntAccu [Rad+(AccuRows>>1)] [Theta] ++;
   }  }  }

   MaxMag = 0;
   for (r=0; r<AccuRows; r++) {
      for (c=0; c<AccuCols; c++) {
         Mag = IntAccu [r][c];
         if (Mag>MaxMag)  MaxMag = Mag;
   }  }

   for (r=0; r<AccuRows; r++) {
      for (c=0; c<AccuCols; c++) {
         Mag = IntAccu [r][c];
         Accu [r][c] = (BYTE) (((long)Mag * MaxGV) / MaxMag);
}  }  }
